所有参考资料贴在最后。

1. virtualbox

下载

2. ubuntu

下载

在虚拟机里安装ubuntu。

Ubuntu桌面入门指南

su获取root权限。

su

3. git

$ apt-get update                                                            
$ apt-get install git   

apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。

安装git

4. go

$ wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz   

wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。 ^foot1

安装go

$ tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz 

tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户。
-c 创建新的档案文件。
-x 从档案文件中释放文件。
-z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
-f 使用档案文件或设备,这个选项通常是必选的。

go环境变量配置

$ vi /etc/profile                                                   

追加内容

export GOROOT=/usr/local/go                                                
export PATH=$PATH:$GOROOT/bin                                            
$ source /etc/profile    

vi命令使用方法

配置go环境变量

5. pipe

$ apt-get install python-pip

安装pipe

更新pipe

更新pipe2

6. Docker

Docker版本

  • Docker Enterprise Edition (Docker EE) 专为企业开发和IT团队设计,用于在大规模生产中构建,运送和运行关键业务应用程序。Docker EE集成,认证和支持,为企业提供业界最安全的容器平台,使所有应用程序现代化。
  • Docker Community Edition (Docker CE) 是开发人员和小团队的理想选择,希望开始使用Docker并尝试基于容器的应用程序。Docker CE可在许多平台上使用,从桌面到云到服务器。

官方安装文档

  1. Update the apt package index:
    更新apt包索引

    $ apt-get update   
    
  2. Install packages to allow apt to use a repository over HTTPS:
    配置apt允许以 HTTPS方式拉取镜像安装

    $ apt-get install \                                                        
        apt-transport-https \                                                
        ca-certificates \                                                    
        curl \                                                                
        software-properties-common       
    
  3. Add Docker’s official GPG key:
    添加Docker仓库的GPG密钥

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -      
    
  4. 校验key9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88.

    $ sudo apt-key fingerprint 0EBFCD88
    
    pub   4096R/0EBFCD88 20xx-xx-xx
    Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
    uid                  Docker Release (CE deb) <docker@docker.com>
    sub   4096R/F273FCD8 20xx-xx-xx
    
  5. Use the following command to set up the stable repository.
    配置稳定镜像

    $ sudo add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"
    
  6. 安装DOCKER CE

    $ sudo apt-get update
    
    $ apt-get install docker-ce  
    

    docker version

  7. 测试

    $ docker run hello-world
    

    测试docker

7. Docker-compose

编排(orchestration),指自动配置、协作和管理服务的过程,在 Docker 中,编排用来描述一组实践过程,这个过程会管理运行在多个 Docker 里的应用,这些 Docker 容器也可能运行在不同的宿主机上。

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

Docker 编排工具 Docker Compose ,由 Python 编写。使用 Docker Compose ,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性。Docker Compose 称这些容器为“服务”:容器通过某些方法并制定一些运行时的属性来和其他容器产生交互。

官方安装文档

$ pip install docker-compose

8. 部署fabric项目

选择的示例sfhackfest

  1. 创建项目目录

    $ mkdir -p /opt/workspace/hackfest                                        
    $ cd /opt/workspace/hackfest   
    

    参数:-p 确保目录名称存在,如果目录不存在的就新创建一个。

  2. 下载示例

    $ curl -L https://github.com/hyperledger/fabric/raw/v1.0.0-preview/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null; tar -xvf sfhackfest.tar.gz
    

    下载并解压缩部署Fabric网络的相关组件 ,包括Docker Compose 脚本, 通道创建/加入脚本, 认证使用的加密要素等

    ls 显示所有文件
    ls -1 显示所有文件(按行显示)
    ls -l 显示所有文件具体信息
    树形结构apt-get install tree
    tree 以树状图显示所有文件

    下载示例

    文件结构

    文件结构

  3. 使用Docker下载示例镜像

    $ docker-compose build
    

    通过执行docker-compose命令, fabric-peer, fabric-orderer, fabric-ca和 cli 都会自动下载、解压缩相关的镜像。

    docker images

  4. 创建fabric网络

    $ docker-compose up
    

    通过Docker-compose构建Fabric网络,创建channel(账本), 将Peer节点加入channel

  1. 查看容器

    $ docker ps
    

    6个Docker容器,3个peer、一个order、一个cli、一个ca。

    嵌入在docker-compose.yml里的channel_test.sh会在CLI容器里执行创建channel和加入channel命令。执行结束,应该只有一个Fabric网络和一个channel,channel包含三个节点peer0,Peer1,Peer2。

  2. 进入客户端

    确保channel已创建,并且peers都成功加入

    $ docker exec -it cli bash
    

    $ more results.txt

    查看结果也可用

    $ cat results.txt
    
> cat主要有三大功能:
1.一次显示整个文件。`$ cat filename`
2.从键盘创建一个文件。`$ cat > filename  `只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件:` $cat file1 file2 > file`
  1. 验证创世块

    $ ls -ltr myc1.block
    

    查看容器内容

9. 资产转移测试

  1. 进入cli容器

    $ docker exec -it cli bash
    

    进入cli容器

  2. 发送createChannel API 给 Orderer

    $ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050   
    
  1. 创建新myc2.block

    $ peer channel create -c myc2
    

    创建myc2.block

    查看myc2.block

  2. 将channel分别加入到3个peer

    $ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc2.block
    $ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc2.block
    $ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer2:7051 peer channel join -b myc2.block
    

    执行加入channel的指令,把创世块作为参数发送joinchannel API给 peer。

    全部Peer节点都加入通道,可以查询账本而无需在每个节点都部署智能合约。

    将通道加入节点

  1. 运行部署命令

    部署chaincode,初始化资产a,b的值分别为100,200

    $ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode deploy -C myc2 -n mycc -p github.com/hyperledger/fabric/examples -c '{"Args":["init","a","100","b","200"]}'
    

    初始化ab资产

  2. 运行调用命令

    调用invoke命令,资产a向b转移10单位数据

    $ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode invoke -C myc2 -n mycc -c '{"function":"invoke","Args":["move","a","b","10"]}'
    

    资产转移

  3. 运行查询命令

    $ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","a"]}'
    

    查询a

    资产转移结果a

    $ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","b"]}'
    

    查询b

    资产转移结果b

  4. 清理容器

    $ docker-compose -f docker-compos.yml down
    

    清理容器

  5. 退出容器

    exit命令退出CLI容器。

10. 参考资料

官方文档
IBM Blockchain 101:开发人员快速入门指南
Hyperledger Fabric V1.0– 开发者快速入门
Hyperledger Fabric V1.0 环境搭建
hyperledger fabric Read-only mirror
Fabric底层开发环境搭建